home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / drivers / matmania.c < prev    next >
C/C++ Source or Header  |  2000-05-04  |  27KB  |  717 lines

  1. /***************************************************************************
  2.  
  3. Mat Mania
  4. Memetron, 1985
  5. (copyright Taito, licensed by Technos, distributed by Memetron)
  6.  
  7. driver by Brad Oliver
  8.  
  9. MAIN BOARD:
  10.  
  11. 0000-0fff RAM
  12. 1000-13ff Video RAM
  13. 1400-17ff Attribute RAM
  14. 1800-1fff ?? Only used in self-test ??
  15. 2000-21ff Background video RAM #1
  16. 2200-23ff Background attribute RAM #1
  17. 2400-25ff Background video RAM #2
  18. 2600-27ff Background attribute RAM #2
  19. 4000-ffff ROM
  20.  
  21. ***************************************************************************/
  22.  
  23. #include "driver.h"
  24. #include "vidhrdw/generic.h"
  25. #include "cpu/m6502/m6502.h"
  26. #include "cpu/m6809/m6809.h"
  27.  
  28. extern unsigned char *matmania_videoram2,*matmania_colorram2;
  29. extern size_t matmania_videoram2_size;
  30. extern unsigned char *matmania_videoram3,*matmania_colorram3;
  31. extern size_t matmania_videoram3_size;
  32. extern unsigned char *matmania_scroll;
  33. extern unsigned char *matmania_pageselect;
  34.  
  35. WRITE_HANDLER( matmania_paletteram_w );
  36. void matmania_vh_convert_color_prom(unsigned char *palette, unsigned short *colortable,const unsigned char *color_prom);
  37. void matmania_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
  38. void maniach_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
  39. WRITE_HANDLER( matmania_videoram3_w );
  40. WRITE_HANDLER( matmania_colorram3_w );
  41. int matmania_vh_start(void);
  42. void matmania_vh_stop(void);
  43. void matmania_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
  44.  
  45. READ_HANDLER( maniach_68705_portA_r );
  46. WRITE_HANDLER( maniach_68705_portA_w );
  47. READ_HANDLER( maniach_68705_portB_r );
  48. WRITE_HANDLER( maniach_68705_portB_w );
  49. READ_HANDLER( maniach_68705_portC_r );
  50. WRITE_HANDLER( maniach_68705_portC_w );
  51. WRITE_HANDLER( maniach_68705_ddrA_w );
  52. WRITE_HANDLER( maniach_68705_ddrB_w );
  53. WRITE_HANDLER( maniach_68705_ddrC_w );
  54. WRITE_HANDLER( maniach_mcu_w );
  55. READ_HANDLER( maniach_mcu_r );
  56. READ_HANDLER( maniach_mcu_status_r );
  57.  
  58.  
  59.  
  60. WRITE_HANDLER( matmania_sh_command_w )
  61. {
  62.     soundlatch_w(offset,data);
  63.     cpu_cause_interrupt(1,M6502_INT_IRQ);
  64. }
  65.  
  66. WRITE_HANDLER( matmania_dac_w )
  67. {
  68.     DAC_signed_data_w(0,data);
  69. }
  70.  
  71.  
  72. WRITE_HANDLER( maniach_sh_command_w )
  73. {
  74.     soundlatch_w(offset,data);
  75.     cpu_cause_interrupt(1,M6809_INT_IRQ);
  76. }
  77.  
  78.  
  79.  
  80. static struct MemoryReadAddress matmania_readmem[] =
  81. {
  82.     { 0x0000, 0x077f, MRA_RAM },
  83.     { 0x1000, 0x17ff, MRA_RAM },
  84.     { 0x2000, 0x27ff, MRA_RAM },
  85.     { 0x3000, 0x3000, input_port_0_r },
  86.     { 0x3010, 0x3010, input_port_1_r },
  87.     { 0x3020, 0x3020, input_port_2_r },
  88.     { 0x3030, 0x3030, input_port_3_r },
  89.     { 0x4000, 0xffff, MRA_ROM },
  90.     { -1 }    /* end of table */
  91. };
  92.  
  93. static struct MemoryWriteAddress matmania_writemem[] =
  94. {
  95.     { 0x0000, 0x077f, MWA_RAM },
  96.     { 0x0780, 0x07df, MWA_RAM, &spriteram, &spriteram_size },
  97.     { 0x1000, 0x13ff, MWA_RAM, &matmania_videoram2, &matmania_videoram2_size },
  98.     { 0x1400, 0x17ff, MWA_RAM, &matmania_colorram2 },
  99.     { 0x2000, 0x21ff, videoram_w, &videoram, &videoram_size },
  100.     { 0x2200, 0x23ff, colorram_w, &colorram },
  101.     { 0x2400, 0x25ff, matmania_videoram3_w, &matmania_videoram3, &matmania_videoram3_size },
  102.     { 0x2600, 0x27ff, matmania_colorram3_w, &matmania_colorram3 },
  103.     { 0x3000, 0x3000, MWA_RAM, &matmania_pageselect },
  104.     { 0x3010, 0x3010, matmania_sh_command_w },
  105.     { 0x3020, 0x3020, MWA_RAM, &matmania_scroll },
  106. //    { 0x3030, 0x3030, MWA_NOP },    /* ?? */
  107.     { 0x3050, 0x307f, matmania_paletteram_w, &paletteram },
  108.     { 0x4000, 0xffff, MWA_ROM },
  109.     { -1 }    /* end of table */
  110. };
  111.  
  112. static struct MemoryReadAddress maniach_readmem[] =
  113. {
  114.     { 0x0000, 0x077f, MRA_RAM },
  115.     { 0x1000, 0x17ff, MRA_RAM },
  116.     { 0x2000, 0x27ff, MRA_RAM },
  117.     { 0x3000, 0x3000, input_port_0_r },
  118.     { 0x3010, 0x3010, input_port_1_r },
  119.     { 0x3020, 0x3020, input_port_2_r },
  120.     { 0x3030, 0x3030, input_port_3_r },
  121.     { 0x3040, 0x3040, maniach_mcu_r },
  122.     { 0x3041, 0x3041, maniach_mcu_status_r },
  123.     { 0x4000, 0xffff, MRA_ROM },
  124.     { -1 }    /* end of table */
  125. };
  126.  
  127. static struct MemoryWriteAddress maniach_writemem[] =
  128. {
  129.     { 0x0000, 0x077f, MWA_RAM },
  130.     { 0x0780, 0x07df, MWA_RAM, &spriteram, &spriteram_size },
  131.     { 0x1000, 0x13ff, MWA_RAM, &matmania_videoram2, &matmania_videoram2_size },
  132.     { 0x1400, 0x17ff, MWA_RAM, &matmania_colorram2 },
  133.     { 0x2000, 0x21ff, videoram_w, &videoram, &videoram_size },
  134.     { 0x2200, 0x23ff, colorram_w, &colorram },
  135.     { 0x2400, 0x25ff, matmania_videoram3_w, &matmania_videoram3, &matmania_videoram3_size },
  136.     { 0x2600, 0x27ff, matmania_colorram3_w, &matmania_colorram3 },
  137.     { 0x3000, 0x3000, MWA_RAM, &matmania_pageselect },
  138.     { 0x3010, 0x3010, maniach_sh_command_w },
  139.     { 0x3020, 0x3020, MWA_RAM, &matmania_scroll },
  140.     { 0x3030, 0x3030, MWA_NOP },    /* ?? */
  141.     { 0x3040, 0x3040, maniach_mcu_w },
  142.     { 0x3050, 0x307f, matmania_paletteram_w, &paletteram },
  143.     { 0x4000, 0xffff, MWA_ROM },
  144.     { -1 }    /* end of table */
  145. };
  146.  
  147. static struct MemoryReadAddress sound_readmem[] =
  148. {
  149.     { 0x0000, 0x01ff, MRA_RAM },
  150.     { 0x2007, 0x2007, soundlatch_r },
  151.     { 0x8000, 0xffff, MRA_ROM },
  152.     { -1 }    /* end of table */
  153. };
  154.  
  155. static struct MemoryWriteAddress sound_writemem[] =
  156. {
  157.     { 0x0000, 0x01ff, MWA_RAM },
  158.     { 0x2000, 0x2000, AY8910_write_port_0_w },
  159.     { 0x2001, 0x2001, AY8910_control_port_0_w },
  160.     { 0x2002, 0x2002, AY8910_write_port_1_w },
  161.     { 0x2003, 0x2003, AY8910_control_port_1_w },
  162.     { 0x2004, 0x2004, matmania_dac_w },
  163.     { 0x8000, 0xffff, MWA_ROM },
  164.     { -1 }    /* end of table */
  165. };
  166.  
  167. static struct MemoryReadAddress maniach_sound_readmem[] =
  168. {
  169.     { 0x0000, 0x0fff, MRA_RAM },
  170.     { 0x2004, 0x2004, soundlatch_r },
  171.     { 0x4000, 0xffff, MRA_ROM },
  172.     { -1 }    /* end of table */
  173. };
  174.  
  175. static struct MemoryWriteAddress maniach_sound_writemem[] =
  176. {
  177.     { 0x0000, 0x0fff, MWA_RAM },
  178.     { 0x2000, 0x2000, YM3526_control_port_0_w },
  179.     { 0x2001, 0x2001, YM3526_write_port_0_w },
  180.     { 0x2002, 0x2002, matmania_dac_w },
  181.     { 0x4000, 0xffff, MWA_ROM },
  182.     { -1 }    /* end of table */
  183. };
  184.  
  185. static struct MemoryReadAddress mcu_readmem[] =
  186. {
  187.     { 0x0000, 0x0000, maniach_68705_portA_r },
  188.     { 0x0001, 0x0001, maniach_68705_portB_r },
  189.     { 0x0002, 0x0002, maniach_68705_portC_r },
  190.     { 0x0010, 0x007f, MRA_RAM },
  191.     { 0x0080, 0x07ff, MRA_ROM },
  192.     { -1 }    /* end of table */
  193. };
  194.  
  195. static struct MemoryWriteAddress mcu_writemem[] =
  196. {
  197.     { 0x0000, 0x0000, maniach_68705_portA_w },
  198.     { 0x0001, 0x0001, maniach_68705_portB_w },
  199.     { 0x0002, 0x0002, maniach_68705_portC_w },
  200.     { 0x0004, 0x0004, maniach_68705_ddrA_w },
  201.     { 0x0005, 0x0005, maniach_68705_ddrB_w },
  202.     { 0x0006, 0x0006, maniach_68705_ddrC_w },
  203.     { 0x0010, 0x007f, MWA_RAM },
  204.     { 0x0080, 0x07ff, MWA_ROM },
  205.     { -1 }    /* end of table */
  206. };
  207.  
  208.  
  209.  
  210. INPUT_PORTS_START( matmania )
  211.     PORT_START    /* IN0 */
  212.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
  213.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY )
  214.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY )
  215.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY )
  216.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
  217.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
  218.     PORT_BIT_IMPULSE( 0x40, IP_ACTIVE_LOW, IPT_COIN2, 1 )
  219.     PORT_BIT_IMPULSE( 0x80, IP_ACTIVE_LOW, IPT_COIN1, 1 )
  220.  
  221.     PORT_START    /* IN1 */
  222.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
  223.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER2 )
  224.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER2 )
  225.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER2 )
  226.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
  227.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
  228.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 )
  229.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
  230.  
  231.     PORT_START    /* DSW1 */
  232.     PORT_DIPNAME(0x03, 0x03, DEF_STR( Difficulty ) )
  233.     PORT_DIPSETTING(   0x03, "Easy" )
  234.     PORT_DIPSETTING(   0x02, "Medium" )
  235.     PORT_DIPSETTING(   0x01, "Hard" )
  236.     PORT_DIPSETTING(   0x00, "Hardest" )
  237.     PORT_DIPNAME(0x04, 0x04, DEF_STR( Unknown ) )
  238.     PORT_DIPSETTING(   0x04, DEF_STR( Off ) )
  239.     PORT_DIPSETTING(   0x00, DEF_STR( On ) )
  240.     PORT_DIPNAME(0x08, 0x08, DEF_STR( Unknown ) )
  241.     PORT_DIPSETTING(   0x08, DEF_STR( Off ) )
  242.     PORT_DIPSETTING(   0x00, DEF_STR( On ) )
  243.     PORT_DIPNAME(0x10, 0x10, DEF_STR( Unknown ) )
  244.     PORT_DIPSETTING(   0x10, DEF_STR( Off ) )
  245.     PORT_DIPSETTING(   0x00, DEF_STR( On ) )
  246.     PORT_DIPNAME(0x20, 0x20, DEF_STR( Unknown ) )
  247.     PORT_DIPSETTING(   0x20, DEF_STR( Off ) )
  248.     PORT_DIPSETTING(   0x00, DEF_STR( On ) )
  249.     PORT_DIPNAME(0x40, 0x40, DEF_STR( Unknown ) )
  250.     PORT_DIPSETTING(   0x40, DEF_STR( Off ) )
  251.     PORT_DIPSETTING(   0x00, DEF_STR( On ) )
  252.     PORT_DIPNAME(0x80, 0x80, DEF_STR( Unknown ) )
  253.     PORT_DIPSETTING(   0x80, DEF_STR( Off ) )
  254.     PORT_DIPSETTING(   0x00, DEF_STR( On ) )
  255.  
  256.     PORT_START    /* DSW2 */
  257.     PORT_DIPNAME(0x03, 0x03, DEF_STR( Coin_A ) )
  258.     PORT_DIPSETTING(   0x00, DEF_STR( 2C_1C ) )
  259.     PORT_DIPSETTING(   0x03, DEF_STR( 1C_1C ) )
  260.     PORT_DIPSETTING(   0x02, DEF_STR( 1C_2C ) )
  261.     PORT_DIPSETTING(   0x01, DEF_STR( 1C_3C ) )
  262.     PORT_DIPNAME(0x0c, 0x0c, DEF_STR( Coin_B ) )
  263.     PORT_DIPSETTING(   0x00, DEF_STR( 2C_1C ) )
  264.     PORT_DIPSETTING(   0x0c, DEF_STR( 1C_1C ) )
  265.     PORT_DIPSETTING(   0x08, DEF_STR( 1C_2C ) )
  266.     PORT_DIPSETTING(   0x04, DEF_STR( 1C_3C ) )
  267.     PORT_DIPNAME(0x10, 0x10, DEF_STR( Demo_Sounds ) )
  268.     PORT_DIPSETTING(   0x00, DEF_STR( Off ) )
  269.     PORT_DIPSETTING(   0x10, DEF_STR( On ) )
  270.     PORT_DIPNAME(0x20, 0x00, DEF_STR( Cabinet ) )
  271.     PORT_DIPSETTING(   0x00, DEF_STR( Upright ) )
  272.     PORT_DIPSETTING(   0x20, DEF_STR( Cocktail ) )
  273.     PORT_SERVICE( 0x40, IP_ACTIVE_LOW )
  274.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_VBLANK )
  275. INPUT_PORTS_END
  276.  
  277. static struct GfxLayout charlayout =
  278. {
  279.     8,8,    /* 8*8 characters */
  280.     1024,    /* 1024 characters */
  281.     3,    /* 3 bits per pixel */
  282.     { 2*1024*8*8, 1024*8*8, 0 },    /* the bitplanes are separated */
  283.     { 0, 1, 2, 3, 4, 5, 6, 7 },
  284.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
  285.     8*8    /* every char takes 8 consecutive bytes */
  286. };
  287.  
  288. static struct GfxLayout tilelayout =
  289. {
  290.     16,16,  /* 16*16 tiles */
  291.     512,    /* 512 tiles */
  292.     3,    /* 3 bits per pixel */
  293.     { 2*512*16*16, 512*16*16, 0 },    /* the bitplanes are separated */
  294.     { 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7,
  295.             0, 1, 2, 3, 4, 5, 6, 7 },
  296.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
  297.             8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
  298.     32*8    /* every tile takes 16 consecutive bytes */
  299. };
  300.  
  301. static struct GfxLayout matmania_spritelayout =
  302. {
  303.     16,16,  /* 16*16 sprites */
  304.     3584,    /* 3584 sprites */
  305.     3,    /* 3 bits per pixel */
  306.     { 2*3584*16*16, 3584*16*16, 0 },    /* the bitplanes are separated */
  307.     { 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7,
  308.             0, 1, 2, 3, 4, 5, 6, 7 },
  309.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
  310.             8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
  311.     32*8    /* every sprite takes 16 consecutive bytes */
  312. };
  313.  
  314. static struct GfxLayout maniach_spritelayout =
  315. {
  316.     16,16,  /* 16*16 sprites */
  317.     3584,    /* 3584 sprites */
  318.     3,    /* 3 bits per pixel */
  319.     { 0, 3584*16*16, 2*3584*16*16 },    /* the bitplanes are separated */
  320.     { 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7,
  321.             0, 1, 2, 3, 4, 5, 6, 7 },
  322.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
  323.             8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
  324.     32*8    /* every sprite takes 16 consecutive bytes */
  325. };
  326.  
  327. static struct GfxLayout maniach_tilelayout =
  328. {
  329.     16,16,  /* 16*16 tiles */
  330.     1024,    /* 1024 tiles */
  331.     3,    /* 3 bits per pixel */
  332.     { 2*1024*16*16, 1024*16*16, 0 },    /* the bitplanes are separated */
  333.     { 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7,
  334.             0, 1, 2, 3, 4, 5, 6, 7 },
  335.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
  336.             8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
  337.     32*8    /* every tile takes 16 consecutive bytes */
  338. };
  339.  
  340. static struct GfxDecodeInfo matmania_gfxdecodeinfo[] =
  341. {
  342.     { REGION_GFX1, 0, &charlayout,              0, 4 },
  343.     { REGION_GFX2, 0, &tilelayout,            4*8, 4 },
  344.     { REGION_GFX3, 0, &matmania_spritelayout, 8*8, 2 },
  345.     { -1 } /* end of array */
  346. };
  347.  
  348. static struct GfxDecodeInfo maniach_gfxdecodeinfo[] =
  349. {
  350.     { REGION_GFX1, 0, &charlayout,             0, 4 },
  351.     { REGION_GFX2, 0, &maniach_tilelayout,   4*8, 4 },
  352.     { REGION_GFX3, 0, &maniach_spritelayout, 8*8, 2 },
  353.     { -1 } /* end of array */
  354. };
  355.  
  356.  
  357.  
  358. static struct AY8910interface ay8910_interface =
  359. {
  360.     2,    /* 2 chips */
  361.     1500000,    /* 1.5 MHz?????? */
  362.     { 30, 30 },
  363.     { 0 },
  364.     { 0 },
  365.     { 0 },
  366.     { 0 }
  367. };
  368.  
  369. static struct DACinterface dac_interface =
  370. {
  371.     1,
  372.     { 40 }
  373. };
  374.  
  375.  
  376.  
  377. static struct MachineDriver machine_driver_matmania =
  378. {
  379.     /* basic machine hardware */
  380.     {
  381.         {
  382.             CPU_M6502,
  383.             1500000,    /* 1.5 Mhz ???? */
  384.             matmania_readmem,matmania_writemem,0,0,
  385.             interrupt,1
  386.         },
  387.         {
  388.             CPU_M6502 | CPU_AUDIO_CPU,
  389.             1200000,    /* 1.2 Mhz ???? */
  390.             sound_readmem,sound_writemem,0,0,
  391.             nmi_interrupt,15    /* ???? */
  392.                                 /* IRQs are caused by the main CPU */
  393.         },
  394.     },
  395.     60, DEFAULT_REAL_60HZ_VBLANK_DURATION,    /* frames per second, vblank duration */
  396.     10,    /* enough time for the audio CPU to get all commands */
  397.     0,
  398.  
  399.     /* video hardware */
  400.     32*8, 32*8, { 0*8, 32*8-1, 1*8, 31*8-1 },
  401.     matmania_gfxdecodeinfo,
  402.     64+16, 64+16,
  403.     matmania_vh_convert_color_prom,
  404.  
  405.     VIDEO_TYPE_RASTER|VIDEO_MODIFIES_PALETTE,
  406.     0,
  407.     matmania_vh_start,
  408.     matmania_vh_stop,
  409.     matmania_vh_screenrefresh,
  410.  
  411.     /* sound hardware */
  412.     0,0,0,0,
  413.     {
  414.         {
  415.             SOUND_AY8910,
  416.             &ay8910_interface
  417.         },
  418.         {
  419.             SOUND_DAC,
  420.             &dac_interface
  421.         }
  422.     }
  423. };
  424.  
  425.  
  426.  
  427. /* handler called by the 3526 emulator when the internal timers cause an IRQ */
  428. static void irqhandler(int linestate)
  429. {
  430.     cpu_set_irq_line(1,1,linestate);
  431.     //cpu_cause_interrupt(1,M6809_INT_FIRQ);
  432. }
  433.  
  434. static struct YM3526interface ym3526_interface =
  435. {
  436.     1,            /* 1 chip (no more supported) */
  437.     3600000,    /* 3.6 MHz ? */
  438.     { 60 },        /* (not supported) */
  439.     { irqhandler },
  440. };
  441.  
  442.  
  443. static struct MachineDriver machine_driver_maniach =
  444. {
  445.     /* basic machine hardware */
  446.     {
  447.         {
  448.             CPU_M6502,
  449.             1500000,    /* 1.5 Mhz ???? */
  450.             maniach_readmem,maniach_writemem,0,0,
  451.             interrupt,1
  452.         },
  453.         {
  454.             CPU_M6809 | CPU_AUDIO_CPU,
  455.             1500000,    /* 1.5 Mhz ???? */
  456.             maniach_sound_readmem,maniach_sound_writemem,0,0,
  457.             ignore_interrupt,0,    /* FIRQs are caused by the YM3526 */
  458.                                 /* IRQs are caused by the main CPU */
  459.         },
  460.         {
  461.             CPU_M68705,
  462.             500000,    /* .5 Mhz (don't know really how fast, but it doesn't need to even be this fast) */
  463.             mcu_readmem,mcu_writemem,0,0,
  464.             ignore_interrupt,1
  465.         }
  466.     },
  467.     60, DEFAULT_REAL_60HZ_VBLANK_DURATION,    /* frames per second, vblank duration */
  468.     100,    /* 100 CPU slice per frame - high interleaving to sync main and mcu */
  469.     0,
  470.  
  471.     /* video hardware */
  472.     32*8, 32*8, { 0*8, 32*8-1, 1*8, 31*8-1 },
  473.     maniach_gfxdecodeinfo,
  474.     64+16, 64+16,
  475.     matmania_vh_convert_color_prom,
  476.  
  477.     VIDEO_TYPE_RASTER|VIDEO_MODIFIES_PALETTE,
  478.     0,
  479.     matmania_vh_start,
  480.     matmania_vh_stop,
  481.     maniach_vh_screenrefresh,
  482.  
  483.     /* sound hardware */
  484.     0,0,0,0,
  485.     {
  486.         {
  487.             SOUND_YM3526,
  488.             &ym3526_interface
  489.         },
  490.         {
  491.             SOUND_DAC,
  492.             &dac_interface
  493.         }
  494.     }
  495. };
  496.  
  497. /***************************************************************************
  498.  
  499.   Mat Mania driver
  500.  
  501. ***************************************************************************/
  502.  
  503. ROM_START( matmania )
  504.     ROM_REGION( 0x10000, REGION_CPU1 )    /* 64k for code */
  505.     ROM_LOAD( "k0-03",        0x4000, 0x4000, 0x314ab8a4 )
  506.     ROM_LOAD( "k1-03",        0x8000, 0x4000, 0x3b3c3f08 )
  507.     ROM_LOAD( "k2-03",        0xc000, 0x4000, 0x286c0917 )
  508.  
  509.     ROM_REGION( 0x10000, REGION_CPU2 )    /* 64k for audio code */
  510.     ROM_LOAD( "k4-0",         0x8000, 0x4000, 0x86dab489 )
  511.     ROM_LOAD( "k5-0",         0xc000, 0x4000, 0x4c41cdba )
  512.  
  513.     ROM_REGION( 0x06000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  514.     ROM_LOAD( "ku-02",        0x00000, 0x2000, 0x613c8698 )    /* Character ROMs - 1024 chars, 3 bpp */
  515.     ROM_LOAD( "kv-02",        0x02000, 0x2000, 0x274ce14b )
  516.     ROM_LOAD( "kw-02",        0x04000, 0x2000, 0x7588a9c4 )
  517.  
  518.     ROM_REGION( 0x0c000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  519.     ROM_LOAD( "kt-02",        0x00000, 0x4000, 0x5d817c70 )    /* tile set */
  520.     ROM_LOAD( "ks-02",        0x04000, 0x4000, 0x2e9f3ba0 )
  521.     ROM_LOAD( "kr-02",        0x08000, 0x4000, 0xb057d3e3 )
  522.  
  523.     ROM_REGION( 0x54000, REGION_GFX3 | REGIONFLAG_DISPOSE )
  524.     ROM_LOAD( "k6-00",        0x00000, 0x4000, 0x294d0878 )    /* sprites */
  525.     ROM_LOAD( "k7-00",        0x04000, 0x4000, 0x0908c2f5 )
  526.     ROM_LOAD( "k8-00",        0x08000, 0x4000, 0xae8341e1 )
  527.     ROM_LOAD( "k9-00",        0x0c000, 0x4000, 0x752ac2c6 )
  528.     ROM_LOAD( "ka-00",        0x10000, 0x4000, 0x46a9cb16 )
  529.     ROM_LOAD( "kb-00",        0x14000, 0x4000, 0xbf016772 )
  530.     ROM_LOAD( "kc-00",        0x18000, 0x4000, 0x8d08bce7 )
  531.     ROM_LOAD( "kd-00",        0x1c000, 0x4000, 0xaf1d6a60 )
  532.     ROM_LOAD( "ke-00",        0x20000, 0x4000, 0x614f19b0 )
  533.     ROM_LOAD( "kf-00",        0x24000, 0x4000, 0xbdf58c18 )
  534.     ROM_LOAD( "kg-00",        0x28000, 0x4000, 0x2189f5cf )
  535.     ROM_LOAD( "kh-00",        0x2c000, 0x4000, 0x6b11ed1f )
  536.     ROM_LOAD( "ki-00",        0x30000, 0x4000, 0xd7ac4ec5 )
  537.     ROM_LOAD( "kj-00",        0x34000, 0x4000, 0x2caee05d )
  538.     ROM_LOAD( "kk-00",        0x38000, 0x4000, 0xeb54f010 )
  539.     ROM_LOAD( "kl-00",        0x3c000, 0x4000, 0xfa4c7e0c )
  540.     ROM_LOAD( "km-00",        0x40000, 0x4000, 0x6d2369b6 )
  541.     ROM_LOAD( "kn-00",        0x44000, 0x4000, 0xc55733e2 )
  542.     ROM_LOAD( "ko-00",        0x48000, 0x4000, 0xed3c3476 )
  543.     ROM_LOAD( "kp-00",        0x4c000, 0x4000, 0x9c84a969 )
  544.     ROM_LOAD( "kq-00",        0x50000, 0x4000, 0xfa2f0003 )
  545.  
  546.     ROM_REGION( 0x0080, REGION_PROMS )
  547.     ROM_LOAD( "matmania.1",   0x0000, 0x0020, 0x1b58f01f ) /* char palette red and green components */
  548.     ROM_LOAD( "matmania.5",   0x0020, 0x0020, 0x2029f85f ) /* tile palette red and green components */
  549.     ROM_LOAD( "matmania.2",   0x0040, 0x0020, 0xb6ac1fd5 ) /* char palette blue component */
  550.     ROM_LOAD( "matmania.16",  0x0060, 0x0020, 0x09325dc2 ) /* tile palette blue component */
  551. ROM_END
  552.  
  553. ROM_START( excthour )
  554.     ROM_REGION( 0x10000, REGION_CPU1 )    /* 64k for code */
  555.     ROM_LOAD( "e29",          0x04000, 0x4000, 0xc453e855 )
  556.     ROM_LOAD( "e28",          0x08000, 0x4000, 0x17b63708 )
  557.     ROM_LOAD( "e27",          0x0c000, 0x4000, 0x269ab3bc )
  558.  
  559.     ROM_REGION( 0x10000, REGION_CPU2 )    /* 64k for audio code */
  560.     ROM_LOAD( "k4-0",         0x8000, 0x4000, 0x86dab489 )
  561.     ROM_LOAD( "k5-0",         0xc000, 0x4000, 0x4c41cdba )
  562.  
  563.     ROM_REGION( 0x06000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  564.     ROM_LOAD( "e30",          0x00000, 0x2000, 0xb2875329 )    /* Character ROMs - 1024 chars, 3 bpp */
  565.     ROM_LOAD( "e31",          0x02000, 0x2000, 0xc9506de8 )
  566.     ROM_LOAD( "e32",          0x04000, 0x2000, 0x00d1635f )
  567.  
  568.     ROM_REGION( 0x0c000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  569.     ROM_LOAD( "e5",           0x00000, 0x4000, 0x0604dc55 )    /* tile set */
  570.     ROM_LOAD( "ks-02",        0x04000, 0x4000, 0x2e9f3ba0 )
  571.     ROM_LOAD( "e3",           0x08000, 0x4000, 0xebd273c6 )
  572.  
  573.     ROM_REGION( 0x54000, REGION_GFX3 | REGIONFLAG_DISPOSE )
  574.     ROM_LOAD( "k6-00",        0x00000, 0x4000, 0x294d0878 )    /* sprites */
  575.     ROM_LOAD( "k7-00",        0x04000, 0x4000, 0x0908c2f5 )
  576.     ROM_LOAD( "k8-00",        0x08000, 0x4000, 0xae8341e1 )
  577.     ROM_LOAD( "k9-00",        0x0c000, 0x4000, 0x752ac2c6 )
  578.     ROM_LOAD( "ka-00",        0x10000, 0x4000, 0x46a9cb16 )
  579.     ROM_LOAD( "kb-00",        0x14000, 0x4000, 0xbf016772 )
  580.     ROM_LOAD( "kc-00",        0x18000, 0x4000, 0x8d08bce7 )
  581.     ROM_LOAD( "kd-00",        0x1c000, 0x4000, 0xaf1d6a60 )
  582.     ROM_LOAD( "ke-00",        0x20000, 0x4000, 0x614f19b0 )
  583.     ROM_LOAD( "kf-00",        0x24000, 0x4000, 0xbdf58c18 )
  584.     ROM_LOAD( "kg-00",        0x28000, 0x4000, 0x2189f5cf )
  585.     ROM_LOAD( "kh-00",        0x2c000, 0x4000, 0x6b11ed1f )
  586.     ROM_LOAD( "ki-00",        0x30000, 0x4000, 0xd7ac4ec5 )
  587.     ROM_LOAD( "kj-00",        0x34000, 0x4000, 0x2caee05d )
  588.     ROM_LOAD( "kk-00",        0x38000, 0x4000, 0xeb54f010 )
  589.     ROM_LOAD( "kl-00",        0x3c000, 0x4000, 0xfa4c7e0c )
  590.     ROM_LOAD( "km-00",        0x40000, 0x4000, 0x6d2369b6 )
  591.     ROM_LOAD( "kn-00",        0x44000, 0x4000, 0xc55733e2 )
  592.     ROM_LOAD( "ko-00",        0x48000, 0x4000, 0xed3c3476 )
  593.     ROM_LOAD( "kp-00",        0x4c000, 0x4000, 0x9c84a969 )
  594.     ROM_LOAD( "kq-00",        0x50000, 0x4000, 0xfa2f0003 )
  595.  
  596.     ROM_REGION( 0x0080, REGION_PROMS )
  597.     ROM_LOAD( "matmania.1",   0x0000, 0x0020, 0x1b58f01f ) /* char palette red and green components */
  598.     ROM_LOAD( "matmania.5",   0x0020, 0x0020, 0x2029f85f ) /* tile palette red and green components */
  599.     ROM_LOAD( "matmania.2",   0x0040, 0x0020, 0xb6ac1fd5 ) /* char palette blue component */
  600.     ROM_LOAD( "matmania.16",  0x0060, 0x0020, 0x09325dc2 ) /* tile palette blue component */
  601. ROM_END
  602.  
  603. ROM_START( maniach )
  604.     ROM_REGION( 0x10000, REGION_CPU1 )    /* 64k for code */
  605.     ROM_LOAD( "mc-mb2.bin",   0x04000, 0x4000, 0xa6da1ba8 )
  606.     ROM_LOAD( "mc-ma2.bin",   0x08000, 0x4000, 0x84583323 )
  607.     ROM_LOAD( "mc-m92.bin",   0x0c000, 0x4000, 0xe209a500 )
  608.  
  609.     ROM_REGION( 0x10000, REGION_CPU2 )    /* 64k for audio code */
  610.     ROM_LOAD( "mc-m50.bin",   0x4000, 0x4000, 0xba415d68 )
  611.     ROM_LOAD( "mc-m40.bin",   0x8000, 0x4000, 0x2a217ed0 )
  612.     ROM_LOAD( "mc-m30.bin",   0xc000, 0x4000, 0x95af1723 )
  613.  
  614.     ROM_REGION( 0x0800, REGION_CPU3 )    /* 8k for the microcontroller */
  615.     ROM_LOAD( "01",           0x0000, 0x0800, 0x00c7f80c )
  616.  
  617.     ROM_REGION( 0x06000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  618.     ROM_LOAD( "mc-m60.bin",   0x00000, 0x2000, 0x1cdbb117 )    /* Character ROMs - 1024 chars, 3 bpp */
  619.     ROM_LOAD( "mc-m70.bin",   0x02000, 0x2000, 0x553f0780 )
  620.     ROM_LOAD( "mc-m80.bin",   0x04000, 0x2000, 0x9392ecb7 )
  621.  
  622.     ROM_REGION( 0x18000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  623.     ROM_LOAD( "mc-m01.bin",   0x00000, 0x8000, 0xda558e4d )    /* tile set */
  624.     ROM_LOAD( "mc-m10.bin",   0x08000, 0x8000, 0x619a02f8 )
  625.     ROM_LOAD( "mc-m20.bin",   0x10000, 0x8000, 0xa617c6c1 )
  626.  
  627.     ROM_REGION( 0x54000, REGION_GFX3 | REGIONFLAG_DISPOSE )
  628.     ROM_LOAD( "mc-mc0.bin",   0x00000, 0x4000, 0x133d644f )    /* sprites */
  629.     ROM_LOAD( "mc-md0.bin",   0x04000, 0x4000, 0xe387b036 )
  630.     ROM_LOAD( "mc-me0.bin",   0x08000, 0x4000, 0xb36b1283 )
  631.     ROM_LOAD( "mc-mf0.bin",   0x0c000, 0x4000, 0x2584d8a9 )
  632.     ROM_LOAD( "mc-mg0.bin",   0x10000, 0x4000, 0xcf31a714 )
  633.     ROM_LOAD( "mc-mh0.bin",   0x14000, 0x4000, 0x6292d589 )
  634.     ROM_LOAD( "mc-mi0.bin",   0x18000, 0x4000, 0xee2e06e3 )
  635.     ROM_LOAD( "mc-mj0.bin",   0x1c000, 0x4000, 0x7e73895b )
  636.     ROM_LOAD( "mc-mk0.bin",   0x20000, 0x4000, 0x66c8bf75 )
  637.     ROM_LOAD( "mc-ml0.bin",   0x24000, 0x4000, 0x88138a1d )
  638.     ROM_LOAD( "mc-mm0.bin",   0x28000, 0x4000, 0xa1a4260d )
  639.     ROM_LOAD( "mc-mn0.bin",   0x2c000, 0x4000, 0x6bc61b58 )
  640.     ROM_LOAD( "mc-mo0.bin",   0x30000, 0x4000, 0xf96ef600 )
  641.     ROM_LOAD( "mc-mp0.bin",   0x34000, 0x4000, 0x1259618e )
  642.     ROM_LOAD( "mc-mq0.bin",   0x38000, 0x4000, 0x102a1666 )
  643.     ROM_LOAD( "mc-mr0.bin",   0x3c000, 0x4000, 0x1e854453 )
  644.     ROM_LOAD( "mc-ms0.bin",   0x40000, 0x4000, 0x7bc9d878 )
  645.     ROM_LOAD( "mc-mt0.bin",   0x44000, 0x4000, 0x09cea985 )
  646.     ROM_LOAD( "mc-mu0.bin",   0x48000, 0x4000, 0x5421769e )
  647.     ROM_LOAD( "mc-mv0.bin",   0x4c000, 0x4000, 0x36fc3e2d )
  648.     ROM_LOAD( "mc-mw0.bin",   0x50000, 0x4000, 0x135dce4c )
  649.  
  650.     ROM_REGION( 0x0080, REGION_PROMS )
  651.     ROM_LOAD( "prom.2",       0x0000, 0x0020, 0x32db2cf4 ) /* char palette red and green components */
  652.     ROM_LOAD( "prom.16",      0x0020, 0x0020, 0x18836d26 ) /* tile palette red and green components */
  653.     ROM_LOAD( "prom.3",       0x0040, 0x0020, 0xc7925311 ) /* char palette blue component */
  654.     ROM_LOAD( "prom.17",      0x0060, 0x0020, 0x41f51d49 ) /* tile palette blue component */
  655. ROM_END
  656.  
  657. ROM_START( maniach2 )
  658.     ROM_REGION( 0x10000, REGION_CPU1 )    /* 64k for code */
  659.     ROM_LOAD( "ic40-mb1",     0x04000, 0x4000, 0xb337a867 )
  660.     ROM_LOAD( "ic41-ma1",     0x08000, 0x4000, 0x85ec8279 )
  661.     ROM_LOAD( "ic42-m91",     0x0c000, 0x4000, 0xa14b86dd )
  662.  
  663.     ROM_REGION( 0x10000, REGION_CPU2 )    /* 64k for audio code */
  664.     ROM_LOAD( "mc-m50.bin",   0x4000, 0x4000, 0xba415d68 )
  665.     ROM_LOAD( "mc-m40.bin",   0x8000, 0x4000, 0x2a217ed0 )
  666.     ROM_LOAD( "mc-m30.bin",   0xc000, 0x4000, 0x95af1723 )
  667.  
  668.     ROM_REGION( 0x0800, REGION_CPU3 )    /* 8k for the microcontroller */
  669.     ROM_LOAD( "01",           0x0000, 0x0800, 0x00c7f80c )
  670.  
  671.     ROM_REGION( 0x06000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  672.     ROM_LOAD( "mc-m60.bin",   0x00000, 0x2000, 0x1cdbb117 )    /* Character ROMs - 1024 chars, 3 bpp */
  673.     ROM_LOAD( "mc-m70.bin",   0x02000, 0x2000, 0x553f0780 )
  674.     ROM_LOAD( "mc-m80.bin",   0x04000, 0x2000, 0x9392ecb7 )
  675.  
  676.     ROM_REGION( 0x18000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  677.     ROM_LOAD( "mc-m01.bin",   0x00000, 0x8000, 0xda558e4d )    /* tile set */
  678.     ROM_LOAD( "mc-m10.bin",   0x08000, 0x8000, 0x619a02f8 )
  679.     ROM_LOAD( "mc-m20.bin",   0x10000, 0x8000, 0xa617c6c1 )
  680.  
  681.     ROM_REGION( 0x54000, REGION_GFX3 | REGIONFLAG_DISPOSE )
  682.     ROM_LOAD( "mc-mc0.bin",   0x00000, 0x4000, 0x133d644f )    /* sprites */
  683.     ROM_LOAD( "mc-md0.bin",   0x04000, 0x4000, 0xe387b036 )
  684.     ROM_LOAD( "mc-me0.bin",   0x08000, 0x4000, 0xb36b1283 )
  685.     ROM_LOAD( "mc-mf0.bin",   0x0c000, 0x4000, 0x2584d8a9 )
  686.     ROM_LOAD( "mc-mg0.bin",   0x10000, 0x4000, 0xcf31a714 )
  687.     ROM_LOAD( "mc-mh0.bin",   0x14000, 0x4000, 0x6292d589 )
  688.     ROM_LOAD( "mc-mi0.bin",   0x18000, 0x4000, 0xee2e06e3 )
  689.     ROM_LOAD( "mc-mj0.bin",   0x1c000, 0x4000, 0x7e73895b )
  690.     ROM_LOAD( "mc-mk0.bin",   0x20000, 0x4000, 0x66c8bf75 )
  691.     ROM_LOAD( "mc-ml0.bin",   0x24000, 0x4000, 0x88138a1d )
  692.     ROM_LOAD( "mc-mm0.bin",   0x28000, 0x4000, 0xa1a4260d )
  693.     ROM_LOAD( "mc-mn0.bin",   0x2c000, 0x4000, 0x6bc61b58 )
  694.     ROM_LOAD( "mc-mo0.bin",   0x30000, 0x4000, 0xf96ef600 )
  695.     ROM_LOAD( "mc-mp0.bin",   0x34000, 0x4000, 0x1259618e )
  696.     ROM_LOAD( "mc-mq0.bin",   0x38000, 0x4000, 0x102a1666 )
  697.     ROM_LOAD( "mc-mr0.bin",   0x3c000, 0x4000, 0x1e854453 )
  698.     ROM_LOAD( "mc-ms0.bin",   0x40000, 0x4000, 0x7bc9d878 )
  699.     ROM_LOAD( "mc-mt0.bin",   0x44000, 0x4000, 0x09cea985 )
  700.     ROM_LOAD( "mc-mu0.bin",   0x48000, 0x4000, 0x5421769e )
  701.     ROM_LOAD( "mc-mv0.bin",   0x4c000, 0x4000, 0x36fc3e2d )
  702.     ROM_LOAD( "mc-mw0.bin",   0x50000, 0x4000, 0x135dce4c )
  703.  
  704.     ROM_REGION( 0x0080, REGION_PROMS )
  705.     ROM_LOAD( "prom.2",       0x0000, 0x0020, 0x32db2cf4 ) /* char palette red and green components */
  706.     ROM_LOAD( "prom.16",      0x0020, 0x0020, 0x18836d26 ) /* tile palette red and green components */
  707.     ROM_LOAD( "prom.3",       0x0040, 0x0020, 0xc7925311 ) /* char palette blue component */
  708.     ROM_LOAD( "prom.17",      0x0060, 0x0020, 0x41f51d49 ) /* tile palette blue component */
  709. ROM_END
  710.  
  711.  
  712.  
  713. GAME( 1985, matmania, 0,        matmania, matmania, 0, ROT270, "Technos (Taito America license)", "Mat Mania" )
  714. GAME( 1985, excthour, matmania, matmania, matmania, 0, ROT270, "Technos (Taito license)", "Exciting Hour" )
  715. GAME( 1986, maniach,  0,        maniach,  matmania, 0, ROT270, "Technos (Taito America license)", "Mania Challenge (set 1)" )
  716. GAME( 1986, maniach2, maniach,  maniach,  matmania, 0, ROT270, "Technos (Taito America license)", "Mania Challenge (set 2)" )    /* earlier version? */
  717.